home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / howtor_1 / ntservic.bas < prev    next >
BASIC Source File  |  1999-08-24  |  6KB  |  139 lines

  1. Attribute VB_Name = "NTServicesManager"
  2. Option Explicit
  3.  
  4. '-----API CONSTANTS-----
  5. Public Const SERVICES_ACTIVE_DATABASE = "ServicesActive"
  6.  
  7. '-----Service Control CONSTANTS-----
  8. Public Const SERVICE_CONTROL_STOP = &H1
  9. Public Const SERVICE_CONTROL_PAUSE = &H2
  10.  
  11. '-----Service State CONSTANTS-----
  12. Public Const SERVICE_STOPPED = &H1
  13. Public Const SERVICE_START_PENDING = &H2
  14. Public Const SERVICE_STOP_PENDING = &H3
  15. Public Const SERVICE_RUNNING = &H4
  16. Public Const SERVICE_CONTINUE_PENDING = &H5
  17. Public Const SERVICE_PAUSE_PENDING = &H6
  18. Public Const SERVICE_PAUSED = &H7
  19.  
  20. '-----Service Control Manager Privileges-----
  21. Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
  22. Public Const SC_MANAGER_CONNECT = &H1
  23. Public Const SC_MANAGER_CREATE_SERVICE = &H2
  24. Public Const SC_MANAGER_ENUMERATE_SERVICE = &H4
  25. Public Const SC_MANAGER_LOCK = &H8
  26. Public Const SC_MANAGER_QUERY_LOCK_STATUS = &H10
  27. Public Const SC_MANAGER_MODIFY_BOOT_CONFIG = &H20
  28. Public Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)
  29.  
  30. '-----Service Object Privileges-----
  31. Public Const SERVICE_QUERY_CONFIG = &H1
  32. Public Const SERVICE_CHANGE_CONFIG = &H2
  33. Public Const SERVICE_QUERY_STATUS = &H4
  34. Public Const SERVICE_ENUMERATE_DEPENDENTS = &H8
  35. Public Const SERVICE_START = &H10
  36. Public Const SERVICE_STOP = &H20
  37. Public Const SERVICE_PAUSE_CONTINUE = &H40
  38. Public Const SERVICE_INTERROGATE = &H80
  39. Public Const SERVICE_USER_DEFINED_CONTROL = &H100
  40. Public Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SERVICE_QUERY_CONFIG Or SERVICE_CHANGE_CONFIG Or SERVICE_QUERY_STATUS Or SERVICE_ENUMERATE_DEPENDENTS Or SERVICE_START Or SERVICE_STOP Or SERVICE_PAUSE_CONTINUE Or SERVICE_INTERROGATE Or SERVICE_USER_DEFINED_CONTROL)
  41.  
  42. '-----Service Status TYPE DECLARATION-----
  43. Private Type SERVICE_STATUS
  44.         dwServiceType As Long
  45.         dwCurrentState As Long
  46.         dwControlsAccepted As Long
  47.         dwWin32ExitCode As Long
  48.         dwServiceSpecificExitCode As Long
  49.         dwCheckPoint As Long
  50.         dwWaitHint As Long
  51. End Type
  52.  
  53. '-----Function Declarations-----
  54. Private Declare Function CloseServiceHandle Lib "advapi32.dll" (ByVal hSCObject As Long) As Long
  55. Private Declare Function ControlService Lib "advapi32.dll" (ByVal hService As Long, ByVal dwControl As Long, lpServiceStatus As SERVICE_STATUS) As Long
  56. Private Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
  57. Private Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long
  58. Private Declare Function QueryServiceStatus Lib "advapi32.dll" (ByVal hService As Long, lpServiceStatus As SERVICE_STATUS) As Long
  59. Private Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long
  60.  
  61. Public Function ServiceStatus(ComputerName As String, ServiceName As String) As String
  62.     Dim ServiceStat As SERVICE_STATUS
  63.     Dim hSManager As Long, hService As Long, hServiceStatus As Long
  64.     
  65.     ServiceStatus = ""
  66.     hSManager = OpenSCManager(ComputerName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
  67.     If hSManager <> 0 Then
  68.         hService = OpenService(hSManager, ServiceName, SERVICE_ALL_ACCESS)
  69.         If hService <> 0 Then
  70.             hServiceStatus = QueryServiceStatus(hService, ServiceStat)
  71.             If hServiceStatus <> 0 Then
  72.                 Select Case ServiceStat.dwCurrentState
  73.                 Case SERVICE_STOPPED
  74.                     ServiceStatus = "Stopped"
  75.                 Case SERVICE_START_PENDING
  76.                     ServiceStatus = "Start Pending"
  77.                 Case SERVICE_STOP_PENDING
  78.                     ServiceStatus = "Stop Pending"
  79.                 Case SERVICE_RUNNING
  80.                     ServiceStatus = "Running"
  81.                 Case SERVICE_CONTINUE_PENDING
  82.                     ServiceStatus = "Continue Pending"
  83.                 Case SERVICE_PAUSE_PENDING
  84.                     ServiceStatus = "Pause Pending"
  85.                 Case SERVICE_PAUSED
  86.                     ServiceStatus = "Paused"
  87.                 End Select
  88.             End If
  89.             CloseServiceHandle hService
  90.         End If
  91.         CloseServiceHandle hSManager
  92.     End If
  93. End Function
  94.  
  95. Public Sub ServicePause(ComputerName As String, ServiceName As String)
  96.     Dim ServiceStatus As SERVICE_STATUS
  97.     Dim hSManager As Long, hService As Long, res As Long
  98.     
  99.     hSManager = OpenSCManager(ComputerName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
  100.     If hSManager <> 0 Then
  101.         hService = OpenService(hSManager, ServiceName, SERVICE_ALL_ACCESS)
  102.         If hService <> 0 Then
  103.             res = ControlService(hService, SERVICE_CONTROL_PAUSE, ServiceStatus)
  104.             CloseServiceHandle hService
  105.         End If
  106.         CloseServiceHandle hSManager
  107.     End If
  108. End Sub
  109.  
  110. Public Sub ServiceStart(ComputerName As String, ServiceName As String)
  111.     Dim ServiceStatus As SERVICE_STATUS
  112.     Dim hSManager As Long, hService As Long, res As Long
  113.     
  114.     hSManager = OpenSCManager(ComputerName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
  115.     If hSManager <> 0 Then
  116.         hService = OpenService(hSManager, ServiceName, SERVICE_ALL_ACCESS)
  117.         If hService <> 0 Then
  118.             res = StartService(hService, 0, 0)
  119.             CloseServiceHandle hService
  120.         End If
  121.         CloseServiceHandle hSManager
  122.     End If
  123. End Sub
  124.  
  125. Public Sub ServiceStop(ComputerName As String, ServiceName As String)
  126.     Dim ServiceStatus As SERVICE_STATUS
  127.     Dim hSManager As Long, hService As Long, res As Long
  128.     
  129.     hSManager = OpenSCManager(ComputerName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)
  130.     If hSManager <> 0 Then
  131.         hService = OpenService(hSManager, ServiceName, SERVICE_ALL_ACCESS)
  132.         If hService <> 0 Then
  133.             res = ControlService(hService, SERVICE_CONTROL_STOP, ServiceStatus)
  134.             CloseServiceHandle hService
  135.         End If
  136.         CloseServiceHandle hSManager
  137.     End If
  138. End Sub
  139.